iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
DevOps

一步步學DevOps:30天入門計劃系列 第 9

Day 09 Linux管道 (pipe)介紹

  • 分享至 

  • xImage
  •  

管道(符號 | ):基本的管道操作,是將一個命令的輸出作為另一個命令的輸入。

管道命令的使用方式透過符號 | 來連接不同的命令,將兩個或多個命令連接在一起,用於處理和轉換數據時更加靈活和高效,能夠一個接一個地處理數據流。

管道操作的基本語法:

command1 | command2 | command3 | ….

command1 的輸出成為 command2 的輸入,command2 的輸出再成為 command3 的輸入。這樣可以將數據流動從一個命令傳遞到另一個命令,以進行處理。

  • 範例1:列出當前目錄中所有的txt文件。

ls | grep .txt
列出所有以.txt結尾的文件。

  • 範例2:過濾和排序文本數據:
    管道操作非常適用於處理檔案文件數據,可以使用以下命令來查看一個文件的前10行並對其進行排序:

head -n 10 file.txt | sort
head -n 10 file.txt 將文件的前10行輸出,然後 sort 命令將這些行按字母順序排序。

  • 範例3:統計數據:
    可以使用管道操作來統計數據,以下命令將計算一個文件中行數的總和:

cat file.txt | wc -l
cat file.txt 將文件的內容輸出,然後 wc -l 命令將行數計數。

  • 範例4:過濾和搜索:
    可以使用 grep 命令和管道操作來過濾文本數據中的特定行。例如,以下命令將查找包含關鍵字 "error" 的行:

cat log.txt | grep "error"
grep "error" 將只輸出包含 "error" 的行。

  • 範例5:結合多個命令:
    可以結合多個命令來執行更複雜的操作。例如,以下命令將查找一個日誌文件中的關鍵字 "error",然後計算包含 "error" 的行數:

cat log.txt | grep "error" | wc -l
首先,cat 輸出日誌文件的內容,然後 grep 過濾包含 "error" 的行,最後 wc -l 計算這些行的數量。

常見與管道( | )一起使用的指令介紹

grep指令

grep指令可用在文件中搜尋特定模式,它可以從指定的文件中過濾所需的字串並在螢幕上顯示,透過結合不同的選項和模式,可以在文件中尋找所需的信息。

常見選項:
-n: 顯示所找到的字串位於文件的第幾行。
-A:顯示匹配結果的前幾行。
-B:顯示匹配結果的後幾行。
-v: 顯示不符合條件的行。

grep -B 5 -A 10 John /home/username

在 /home/username 中,搜尋包含 "John" 字串的行,並顯示該行的前 5 行與後 10 行。

grep -n John /home/username

顯示 /home/username 中包含 "John" 字串的行,並列出這些行的行號:

sort 和 uniq 指令:

sort 命令用於對文件內容進行排序,而uniq 命令用於去除連續重複。將這兩個命令結合使用,可以對文件進行排序和去除連續重複。

範例:

cat unsorted.txt | sort | uniq

這個命令首先使用 cat 命令將文件的內容輸出,然後使用 sort 命令對這些行進行排序,最後使用 uniq 命令去除重複的行。結果將是一個經過排序且沒有重複行的文本。

awk 命令:

awk用於以指定的方式處理和格式化文件內容,可以與管道一起使用以處理更複雜的文件資料處理。使用awk來搜索、過濾、提取和轉換文本。以下是一些常見的 awk 命令示例:

  • 取出顯示每行的第一個字段:
cat data.txt | awk '{print $1}'

取出 data.txt 中每行的第一個字段並輸出。

  • 取出顯示第二個字段:
awk '{print $2}' filename

將取出 filename 中的每行的第二個字段並輸出。

  • 模式匹配:顯示包含 "error" 的行:
awk '/error/ {print}' filename

顯示 filename 中包含 "error" 的行。

  • 自定義分隔符:使用自定義的字段分隔符(逗號)來處理 CSV 文件:
awk -F ',' '{print $2}' csvfile.csv

使用逗號作為字段分隔符,提取 csvfile.csv 中的第二個字段。

  • 多條件:對符合多個條件的行執行操作:
awk '$1 > 10 && $2 == "error" {print $3}' filename

filename 中第一列大於 10 且第二列等於 "error" 的行,提取並輸出第三列的內容。

sed 命令

sed 命令對檔案中的文字執行取代操作,以下是一些 sed 命令的常見用法:

  • 替換文字: 將文件中所有匹配的文字替換為新的文字。例如,以下命令將所有的 "舊文字" 替換為 "新文字":
sed 's/舊文字/新文字/g' 文件
  • 刪除行: 如果您需要刪除文件中包含特定文字的行。例如,以下命令將刪除包含 "要刪除的文字" 的所有行:
sed '/要刪除的文字/d' 文件
  • 插入文字:在文件中的某一行前或後插入新的文字。例如,以下命令在匹配行後插入新文字:
sed '/插入位置/a 新文字' 文件
  • 顯示特定行: 如果只想顯示文件中的特定行,可以使用以下命令,其中 "行號" 是要顯示的行的號碼:
sed -n '行號p' 文件
  • 多個操作:可以對文件應用多個操作,將它們組合在一起以實現所需的處理。例如,以下命令應用了兩個不同的操作:
sed -e '操作1' -e '操作2' 文件

正則表達式: 還可以使用正規表示式進行更複雜的匹配和操作,例如,以下命令將所有數字替換為 "替換的數字":
sed 's/[0-9]+/替換的數字/g' 文件


上一篇
Day 08 Linux I/O訊息重定向
下一篇
Day 10 vi 文字編輯器基本操作
系列文
一步步學DevOps:30天入門計劃30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言